﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;

namespace Pacman
{
    class MouvementAleatoire : Mouvement
    {
        private static Random rnd;

        public MouvementAleatoire(Fantome fantome, byte[,] map)
            : base(fantome, map)
        {
            rnd = new Random();
        }

        public MouvementAleatoire(Fantome fantome, byte[,] map, int _indDividVitesse)
            : base(fantome, map)
        {
            rnd = new Random();
            this.indDividVitesse = _indDividVitesse;
        }

        public override void Move(Jeu jeu, Sommet[,] mesSommets, Vector2 Destination, Fantome fantome)
        {
            //Nouvelle direction
            int dir = getDirection();
            switch (dir)
            {
                case 0 :
                    fantome.Vitesse = vHaut;
                    break;
                case 1 :
                    fantome.Vitesse = vDroite;
                    break;
                case 2 :
                    fantome.Vitesse = vBas;
                    break;
                case 3 :
                    fantome.Vitesse = vGauche;
                    break;
            }
        }

        /// <summary>
        /// Retourne la direction aléatoire en fonction des possibilitées
        /// </summary>
        /// <returns>indices 0=>Haut, 1=>Droite, 2=>Bas, 3=>Gauche</returns>
        private int getDirection()
        {
            bool[] casesPossibles = getCasesPossibles();
            int nbCasesPossibles = 0;
            for (int i = 0; i < casesPossibles.Length; i++)
            {
                if (casesPossibles[i]) nbCasesPossibles++;
            }
            int nbRnd = rnd.Next(nbCasesPossibles); //Génère un nombre aléatoire
            for (int i = 0; i < casesPossibles.Length; i++)
            {
                if (!casesPossibles[i])
                    continue;
                if (nbRnd-- == 0)
                    return i;
            }
            return -1;
        }

    }
}
